/**
 * Copyright (c) 2021-2028, iron.guo 郭成杰 (jiedreams@sina.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.beluga.core.oss.props;

import com.beluga.core.support.Kv;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

/**
 * @Author iron.guo
 * @Date 2022/4/18
 * @Description
 */
@EnableConfigurationProperties(value = {OssProperties.class})
@ConfigurationProperties(prefix = "oss.aliyun")
public class OssProperties {

    /**
     * 对象存储名称
     */
    private String name;

    /**
     * 是否开启租户模式
     */
    private Boolean tenantMode;

    /**
     * 对象存储服务的URL
     */
    private String endpoint;

    /**
     * Access key就像用户ID，可以唯一标识你的账户
     */
    private String accessKey;

    /**
     * Secret key是你账户的密码
     */
    private String secretKey;

    /**
     * 默认的存储桶名称
     */
    private String bucketName = "beluga";

    /**
     * 设置OSSClient允许打开的最大HTTP连接数，默认为1024个。
     */
    private Integer maxConnections = 1024;

    /**
     * 设置Socket层传输数据的超时时间，默认为50000毫秒。
     */
    private Integer socketTimeout = 50000;

    /**
     * 设置建立连接的超时时间，默认为50000毫秒。
     */
    private Integer connectionTimeout = 50000;

    /**
     * 设置从连接池中获取连接的超时时间（单位：毫秒），默认不超时。
     */
    private Integer connectionRequestTimeout = 1000;

    /**
     * 设置连接空闲超时时间。超时则关闭连接，默认为60000毫秒。
     */
    private Integer idleConnectionTime = 60000;

    /**
     * 设置失败请求重试次数，默认为3次。
     */
    private Integer maxErrorRetry = 3;


    /**
     * 自定义属性
     */
    private Kv args;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Boolean getTenantMode() {
        return tenantMode;
    }

    public void setTenantMode(Boolean tenantMode) {
        this.tenantMode = tenantMode;
    }

    public String getEndpoint() {
        return endpoint;
    }

    public void setEndpoint(String endpoint) {
        this.endpoint = endpoint;
    }

    public String getAccessKey() {
        return accessKey;
    }

    public void setAccessKey(String accessKey) {
        this.accessKey = accessKey;
    }

    public String getSecretKey() {
        return secretKey;
    }

    public void setSecretKey(String secretKey) {
        this.secretKey = secretKey;
    }

    public String getBucketName() {
        return bucketName;
    }

    public void setBucketName(String bucketName) {
        this.bucketName = bucketName;
    }

    public Integer getMaxConnections() {
        return maxConnections;
    }

    public void setMaxConnections(Integer maxConnections) {
        this.maxConnections = maxConnections;
    }

    public Integer getSocketTimeout() {
        return socketTimeout;
    }

    public void setSocketTimeout(Integer socketTimeout) {
        this.socketTimeout = socketTimeout;
    }

    public Integer getConnectionTimeout() {
        return connectionTimeout;
    }

    public void setConnectionTimeout(Integer connectionTimeout) {
        this.connectionTimeout = connectionTimeout;
    }

    public Integer getConnectionRequestTimeout() {
        return connectionRequestTimeout;
    }

    public void setConnectionRequestTimeout(Integer connectionRequestTimeout) {
        this.connectionRequestTimeout = connectionRequestTimeout;
    }

    public Integer getIdleConnectionTime() {
        return idleConnectionTime;
    }

    public void setIdleConnectionTime(Integer idleConnectionTime) {
        this.idleConnectionTime = idleConnectionTime;
    }

    public Integer getMaxErrorRetry() {
        return maxErrorRetry;
    }

    public void setMaxErrorRetry(Integer maxErrorRetry) {
        this.maxErrorRetry = maxErrorRetry;
    }

    public Kv getArgs() {
        return args;
    }

    public void setArgs(Kv args) {
        this.args = args;
    }
}
